package br.rui.adiantamento.negocio;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;

import br.rui.adiantamento.dominio.Adiantamento;
import br.rui.adiantamento.dominio.Funcionario;
import br.rui.adiantamento.persistencia.AdiantamentoDB;
import br.rui.adiantamento.persistencia.ClienteDB;
import br.rui.adiantamento.persistencia.FuncionarioDB;
import br.rui.planilhas.util.Utils;
import dominio.Cliente;

public class Fachada{
	
	public static void cadastrarAdiantamento(Funcionario funcionario, Adiantamento adiantamento) {
		funcionario.setSaldo(adiantamento.getSaldoFinal());
		FuncionarioDB.update(funcionario);
		AdiantamentoDB.save(funcionario,adiantamento);	
	}
	public static void cadastrarFuncionario(Cliente cliente,Funcionario funcionario){
		FuncionarioDB.save(cliente,funcionario);
	}
	public static Collection<Adiantamento> recuperarAdiantamentos(Funcionario funcionario) {
		return AdiantamentoDB.findByFuncionario(funcionario);
	}
	public static Cliente recuperarCliente(String cnpj) {
		return ClienteDB.findByCNPJ(cnpj);
	}
	public static Collection<Cliente> recuperarClientes(){
		return ClienteDB.findByAll();
	}
	public static Funcionario recuperarFuncinario(String cpfFuncionario) {
		return FuncionarioDB.findByCPF(cpfFuncionario);
	}
	public static Collection<Funcionario> recuperarFuncionarios(String cnpjEmpresa) {
		return FuncionarioDB.findByEmpresa(cnpjEmpresa);
	}
	public static Cliente recuperarEmpresaFuncionario(Funcionario funcionario) {
		String cnpj = FuncionarioDB.findEmpresa(funcionario);
		return recuperarCliente(cnpj);
	}
	public static Collection<Adiantamento> recuperarAdiantamentosPeriodo(String cnpjEmpresa, Date periodoInicial, Date periodoFinal) {
		Collection<Funcionario> funcionarios = FuncionarioDB.findByEmpresa(cnpjEmpresa);
		Collection<Adiantamento> adiantamentosPeriodo = new ArrayList<Adiantamento>();
		for (Funcionario funcionario : funcionarios) {
			Collection<Adiantamento> adiantamentos = recuperarAdiantamentos(funcionario);
			for (Adiantamento adiantamento : adiantamentos) {
				Date periodo = Utils.String2Date(adiantamento.getPeriodo());
				if((periodo.compareTo(periodoInicial) == 1 || periodo.compareTo(periodoInicial) == 0) && (periodo.compareTo(periodoFinal) == -1 || periodo.compareTo(periodoFinal) == 0)){
					adiantamento.setFuncionario(funcionario);
					adiantamentosPeriodo.add(adiantamento);
				}				
			}
		}
		return adiantamentosPeriodo;
	}
}
